﻿Ext.onReady(function(){
	Ext.QuickTips.init();
	Ext.form.Field.prototype.msgTarget = 'side';
	var btn;

	var urlAction = SiteUrl + '/admincpanel/admin-group/';
	var couldnot = 'Không thể kết nối đến server. Xin vui lòng thử lại sau!';

	var DataStore = new Ext.data.Store({
		id: 'DataStore',
		proxy: new Ext.data.HttpProxy({
			url: urlAction + 'action',
			method: 'POST'
		}),
		baseParams:{task: "LISTING"}, // Action
		reader: new Ext.data.JsonReader({
			root: 'results',
			totalProperty: 'total'
		},[
			{name: 'ID', type: 'int', mapping: 'id'},
			{name: 'GroupName', type: 'string', mapping: 'group_name'},
			{name: 'Published', type: 'int', mapping: 'status'}
		]),
		remoteSort: false
	});
	
	var ColumnModel = new Ext.grid.ColumnModel( 
	[
	new Ext.grid.RowNumberer()
	,{
		header: '<b class=tieude> ID </b>',
		readOnly: true,
		dataIndex: 'ID',
		sortable: false,
		width: 60,        
		renderer: function(value, cell){ 
			return value;
		},
		hidden: true
	},{
		header: '<b class=tieude> Tên nhóm </b>',
		dataIndex: 'GroupName',
		id: 'GroupName',
		width: 350,
		sortable: false,
		editor: new Ext.form.TextField({
			allowBlank: false,
			maxLength: 150
		}),
		renderer: function(value, cell){
			return value;
		}
	},{
		header: '<b class=tieude> Published </b>',
		dataIndex: 'Published',
		width: 80,
		editor: new Ext.form.ComboBox({
			typeAhead: true,
			triggerAction: 'all',
			store:new Ext.data.SimpleStore({
				fields:['Value', 'Name'],
				data: [[1,'Có'],[0,'Không']]
			}),
			mode: 'local',
			displayField: 'Name',
			valueField: 'Value',
			lazyRender: true,
			editable: false,
			allowBlank: false,
			listClass: 'x-combo-list-small'
		}),
		renderer: function(value, cell){
			switch(value) {
				case 1: case '1': value = 'Có'; break;
				case 0: case '0': value = 'Không'; break;
			}
			return value;
		}
	}]);
	
	ColumnModel.defaultSortable = true;

	var ListingEditorGrid =  new Ext.grid.EditorGridPanel({
		id: 'ListingEditorGrid',
		autoExpandColumn: 'GroupName',
		store: DataStore,
		cm: ColumnModel,
		enableColLock:false,
		border: false,
		clicksToEdit:2,
		selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
		loadMask: {msg:'Đang tải dữ liệu, xin vui lòng đợi...'},
		bbar: new Ext.PagingToolbar({
			pageSize: 20,
			store: DataStore,
			displayInfo: true,
			displayMsg: 'Đang hiển thị từ {0} đến {1} trong {2} nhóm thành viên.',
			emptyMsg: "Hiện tại chưa có nhóm thành viên nào...",
		}),
		tbar: [{
				text: 'Thêm',
				iconCls:'add',
				id: 'add',
				handler: displayFormWindow
			}, '-', { 
				text: 'Xóa',
				handler: confirmDelete,
				iconCls:'remove'
			}, '-', { 
				text: 'Phân quyền',
				handler: confirmPrivilege,
				iconCls:'add',
				id: 'privi'
			}
		]
	});
	
	ListingEditorGrid.addListener('rowcontextmenu', onListingEditorGridContextMenu);   
    
	var ListingWindow = new Ext.Viewport({
		id: 'ListingWindow',
		plain: false,
		layout: 'fit',
		bodyStyle: 'padding:5px',
		items: [ListingEditorGrid]
	});
    
	DataStore.load({params: {start: 0, limit: 20}});
	ListingWindow.show();
	ListingEditorGrid.on('afteredit', saveEntry);
  
	var GroupName = new Ext.form.TextField({
		id: 'FullName',
		fieldLabel: 'Tên nhóm',
		allowBlank:  false,
		anchor : '95%',
		maxLength: 150
	});
	
	var Published = new Ext.form.ComboBox({
		id:'Published',
		fieldLabel: 'Hiển thị',
		store:new Ext.data.SimpleStore({
			fields:['Value', 'Name'],
       		data: [['1','Có'],['0','Không']]
		}),
		mode: 'local',
		displayField: 'Name',
		allowBlank: false,
		editable: false,
		valueField: 'Value',
		anchor:'92%',
		triggerAction: 'all'
	});
	
	var CreateForm = new Ext.FormPanel({
		labelAlign: 'top',
		bodyStyle: 'padding:5px 0 5px 5px;',
		items: [{
			layout: 'column',
			border: false,
			items: [{
				columnWidth: 0.7,
				layout: 'form',
				border: false,
				items: [GroupName]
			},{
				columnWidth: 0.3,
				layout: 'form',
				border: false,
				items: [Published]
			}]
		}],
		buttons: [{
			text: 'Save and Close',
			handler: createEntry
			},{
			text: 'Cancel',
			handler: function(){
				CreateWindow.hide();
			}
		}],

		keys: {
			key: 27, // Esc key
			handler: function(){ CreateWindow.hide(); },
			scope: this
		}
	});
  
	var CreateWindow= new Ext.Window({
		id: 'CreateWindow',
		title: 'Thêm nhóm:',
		closable: false,
		draggable: false,
		width: 810,
		height: 125,
		modal: true,
		plain: true,
		layout: 'fit',
		resizable: false,
		animateTarget: "add",
		items: CreateForm
	});
	
	var FieldID = new Ext.form.Field({
		id: 'FieldID',
		name: 'FieldID',
		allowBlank: false,
		anchor : '95%',
		hidden: true
	});
	
	var Task = new Ext.form.Field({
		id: 'Task',
		name: 'task',
		allowBlank: false,
		anchor : '95%',
		hidden: true
	});
	
	var PrivilegeForm = new Ext.FormPanel({
		labelAlign: 'top',
		bodyStyle: 'padding:5px 0 5px 5px;',
		items: [AdminGroup, GroupGroup, MemberGroup, PrivilegeGroup, FieldID, Task],
		buttons: [{
			text: 'Save and Close',
			handler: function()
			{
				PrivilegeForm.getForm().getEl().dom.action = urlAction + 'action';
				PrivilegeForm.getForm().getEl().dom.method = 'POST';
				PrivilegeForm.getForm().submit({
					waitMsg:'Loading...',
					success: function(form, data)
					{
						var status = data.result.data;
						if (status == 'ok')
						{
							Ext.TipOK.msg('Sucess:', 'Cập nhật dữ liệu thành công.');
							PrivilegeWindow.hide();
						}
						else if (status == 'privilege')
						{
							Ext.TipOK.msg('Warning:', 'Bạn không được quyền sử dụng chức năng này, xin vui lòng liên hệ với người quản trị để biết thêm thông tin.');
						}
						else
						{
							Ext.TipOK.msg('Warning:', 'Không cập nhật được dữ liệu.');
						}
                    },
                    failure: function(form, data)
					{
						Ext.MessageBox.alert('Error', 'Unknown error...@@');
                    }
				});
			}
		},{
			text: 'Cancel',
			handler: function(){
				PrivilegeWindow.hide();
			}
		}],

		keys: {
			key: 27, // Esc key
			handler: function(){ PrivilegeWindow.hide(); },
			scope: this
		}
	});
  
	var PrivilegeWindow= new Ext.Window({
		id: 'PrivilegeWindow',
		title: 'Thêm nhóm:',
		closable: false,
		draggable: false,
		width: 810,
		height: 600,
		modal: true,
		plain: true,
		layout: 'fit',
		resizable: false,
		animateTarget: "add",
		items: PrivilegeForm
	});
	
	// Update
	function saveEntry(oGrid_event){
		Ext.Ajax.request({
			url: urlAction + 'edit',
			params: {
				task: "UPDATEPRES",
				id: oGrid_event.record.data.ID,
				groupname: oGrid_event.record.data.GroupName,
				status: oGrid_event.record.data.Published
			}, 
			success: function(response){              
				var result = response.responseText;
				switch(result){
					case 'ok':
						Ext.TipOK.msg('Success:', 'Cập nhật dữ liệu thành công!');
						break;
					case 'exist':
						Ext.TipOK.msg('Warning:', 'Nhóm đã tồn tại, xin vui lòng kiểm tra lại.');
						break;
					case 'required':
						Ext.TipOK.msg('Warning:', 'Dữ liệu trong form không được để trống...');
						break;
					default:
						Ext.TipOK.msg('Warning:', result);
						break;
				}
				DataStore.commitChanges();
				DataStore.reload();
			},
			failure: function(response){
				var result = response.responseText;
				Ext.MessageBox.alert('&nbsp; Warning:', result);    
			}                      
		});   
	}

	function isFormValid(){
		return (CreateForm.getForm().isValid());
	}
	
	// Them danh muc
	function createEntry(){
		if(isFormValid()) {
			Ext.Ajax.request({
				url: urlAction + 'add',
				params: {
					task: "CREATEPRES",
					groupname: GroupName.getValue(),
					status: Published.getValue()
				}, 
				success: function(response){              
					var result = response.responseText;
					//Ext.TipOK.msg('Success:', result);
					switch(result){
						case 'ok':
							Ext.TipOK.msg('Success:', 'Thêm dữ liệu thành công!');
							DataStore.reload();
							CreateWindow.hide();
							break;
						case 'exist':
							Ext.TipOK.msg('Warning:', 'Nhóm đã tồn tại, xin vui lòng kiểm tra lại.');
							break;
						case 'required':
							Ext.TipOK.msg('Warning:', 'Dữ liệu trong form không được để trống...');
							break;
						default:
							Ext.TipOK.msg('Warning:', result);
							break;
					}        
				},
				failure: function(response){
					var result = response.responseText;
					Ext.MessageBox.alert('&nbsp; Warning:', result);         
				}                      
			});
		}
	}
  
	function resetForm(){
		CreateForm.getForm().reset();
	}
  
  	function PriviReset()
	{
		PrivilegeForm.getForm().reset();
	}
	
	function displayFormWindow(){
		if (!CreateWindow.isVisible()){
			resetForm();
			CreateWindow.show();
		} else {
			CreateWindow.toFront();
		}
	}
  
  	function confirmPrivilege(){
		if (ListingEditorGrid.selModel.getCount() == 1)
		{
			var selections = ListingEditorGrid.selModel.getSelections();
			if (selections[0].json.id == 1)
			{
				Ext.TipOK.msg('Warning:', 'Bạn không sửa quyền cho nhóm này được.');
			}
			else
			{
				if (!PrivilegeWindow.isVisible()){
					PriviReset();
					PrivilegeWindow.show();
				} else {
					PrivilegeWindow.toFront();
				}
				var gtitle = selections[0].json.group_name;
				PrivilegeWindow.setTitle('Phân quyền cho nhóm: ' + gtitle);
				
				// load data into form
				PrivilegeForm.getForm().load({
					url: urlAction + 'action',
					params: {
						task: "GETPRIVILEGE",
						id: selections[0].json.id
					}
				});
			}
		} else if(ListingEditorGrid.selModel.getCount() > 1){
			Ext.TipOK.msg('Warning:', 'Bạn chỉ được phân quyễn mỗi lần cho 1 nhóm thành viên.');
		} else {
			Ext.TipOK.msg('Thông báo:', 'Bạn không thể phân quyền khi chưa chọn nhóm...');
		}
	}

  	function confirmDelete(){
		if (ListingEditorGrid.selModel.getCount() == 1)
		{
			Ext.MessageBox.confirm('&nbsp; Xin vui lòng cẩn thận:','Bạn có thực sự muốn xóa nhóm thành viên này không (sẽ xóa luôn các thành viên có trong nhóm này)???', deleteSelections);
		} else if(ListingEditorGrid.selModel.getCount() > 1){
			Ext.MessageBox.confirm('&nbsp; Xin vui lòng cẩn thận:','Bạn có thực sự muốn xóa những nhóm thành viên này không (sẽ xóa luôn thành viên có trong những nhóm này)???', deleteSelections);
		} else {
			Ext.TipOK.msg('Thông báo:', 'Bạn không thể xóa khi chưa chọn dữ liệu...');
		}
	}  
  
	function deleteSelections(btn){
		if (btn=='yes'){
			var selections = ListingEditorGrid.selModel.getSelections();
			var prez = [];
			for(i = 0; i< ListingEditorGrid.selModel.getCount(); i++){
				prez.push(selections[i].json.id);
			}
			var encoded_array = Ext.encode(prez);
			Ext.Ajax.request({  
				url: urlAction + 'del', 
				params: { 
					task: "DELETEPRES", 
					ids:  encoded_array
				}, 
				success: function(response){
					var result = response.responseText;
					switch(result){
						case 'ok':
							Ext.TipOK.msg('Success:', 'Xóa thành công!');
							DataStore.reload();
							break;
						case 'no':
							Ext.TipOK.msg('Warning:', 'Bạn không thể xóa được nhóm thành viên này!');
							break;
						default:
							Ext.TipOK.msg('Warning:', result);
							break;
					}
				},
				failure: function(response){
					var result = response.responseText;
					Ext.MessageBox.alert('&nbsp; Warning:', result);      
				}
			});
		}  
	}
	
	function onListingEditorGridContextMenu(grid, rowIndex, e) {
		e.stopEvent();
	}
});
